home *** CD-ROM | disk | FTP | other *** search
/ The Complete Utilities To…ka 501 Killer Utilities! / 501 Killer Utilities! (Macworld July 1995).cdr / Programming / metro-c-cpp-121 / C_C++_1.2.1 / INTO ‘Headers’ / INTO ‘Universal Headers’ / SoundComponents.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-25  |  15.5 KB  |  420 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        SoundComponents.h
  3.  
  4.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  5.                  All rights reserved.
  6.  
  7.      Version:    Universal Interfaces 2.0a4 Wednesday, January 25, 1995. 
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. */
  16.  
  17. #ifndef __SOUNDCOMPONENTS__
  18. #define __SOUNDCOMPONENTS__
  19.  
  20. #ifndef rez
  21.  
  22. #ifndef __TYPES__
  23. #include <Types.h>
  24. #endif
  25. /*    #include <ConditionalMacros.h>                                */
  26.  
  27. #ifndef __COMPONENTS__
  28. #include <Components.h>
  29. #endif
  30. /*    #include <MixedMode.h>                                        */
  31.  
  32. #ifndef __SOUND__
  33. #include <Sound.h>
  34. #endif
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif
  39.  
  40. #if GENERATINGPOWERPC
  41. #pragma options align=mac68k
  42. #endif
  43.  
  44. #ifdef __CFM68K__
  45. #pragma lib_export on
  46. #endif
  47.  
  48. #endif /* rez */
  49. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  50. /* constants*/
  51. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  52.  
  53.  
  54. /*sound component types and subtypes*/
  55. #define kNoSoundComponentType            '****'
  56.  
  57.  
  58. #define kSoundHardwareType                'sdev'        /*component type for sound devices*/
  59. #define kSoundComponentType                'sift'
  60. #define     kRate8SubType                'ratb'        /*8-bit rate converter*/
  61. #define     kRate16SubType                'ratw'        /*16-bit rate converter*/
  62. #define kConverterSubType                'conv'        /*sample format converter*/
  63. #define kSndSourceSubType                'sour'        /*generic source component*/
  64.  
  65.  
  66. #define kMixerType                        'mixr'
  67. #define     kMixer8SubType                'mixb'        /*8-bit mixer*/
  68. #define     kMixer16SubType                'mixw'        /*16-bit mixer*/
  69.  
  70.  
  71. #define kSoundOutputDeviceType            'sdev'        /*sound output component*/
  72. #define        kClassicSubType                'clas'        /*classic hardware, i.e. Mac Plus*/
  73. #define     kASCSubType                    'asc '        /*Apple Sound Chip device*/
  74. #define     kDSPSubType                    'dsp '        /*DSP device*/
  75. #define     kAwacsSubType                'awac'        /*Another of Will's Audio Chips device*/
  76. #define     kSingerSubType                'sing'        /*Singer (via Whitney) based sound*/
  77.  
  78.  
  79. #define kSoundCompressor                'scom'
  80. #define kSoundDecompressor                'sdec'
  81. #define     kMace3SubType                'MAC3'        /*MACE 3:1*/
  82. #define     kMace6SubType                'MAC6'        /*MACE 6:1*/
  83. #define     kCDXA4SubType                'cdx4'        /*CD/XA 4:1*/
  84. #define     kCDXA2SubType                'cdx2'        /*CD/XA 2:1*/
  85. #define     kIMA4SubType                'ima4'        /*IMA 4:1*/
  86.  
  87.  
  88. /*Audio components and sub-types*/
  89. #define kAudioComponentType                'adio'
  90. #define        kAwacsPhoneSubType            'hphn'
  91. #define        kAudioVisionSpeakerSubType    'telc'
  92. #define        kAudioVisionHeadphoneSubType 'telh'
  93.  
  94.  
  95. /*features flags*/
  96. #define k8BitRawIn                    (1 << 0)                    /*data description*/
  97. #define k8BitTwosIn                    (1 << 1)
  98. #define k16BitIn                    (1 << 2)
  99. #define kStereoIn                    (1 << 3)
  100. #define k8BitRawOut                    (1 << 8)
  101. #define k8BitTwosOut                (1 << 9)
  102. #define k16BitOut                    (1 << 10)
  103. #define kStereoOut                    (1 << 11)
  104.  
  105. #define kReverse                    0x00010000 /* (1L << 16) */     /*function description*/
  106. #define kRateConvert                0x00020000 /* (1L << 17) */
  107. #define kCreateSoundSource            0x00040000 /* (1L << 18) */
  108.  
  109. #define kHighQuality                0x00400000 /* (1L << 22) */    /*performance description*/
  110. #define kRealTime                    0x00800000 /* (1L << 23) */
  111.  
  112.  
  113. #ifndef rez
  114.  
  115. enum {
  116. /*sound component set/get info selectors*/
  117.     siVolume                    = 'volu',
  118.     siHardwareVolume            = 'hvol',
  119.     siSpeakerVolume                = 'svol',
  120.     siHeadphoneVolume            = 'pvol',
  121.     siHardwareVolumeSteps        = 'hstp',
  122.     siHeadphoneVolumeSteps        = 'hdst',
  123.     siHardwareMute                = 'hmut',
  124.     siSpeakerMute                = 'smut',
  125.     siHeadphoneMute                = 'pmut',
  126.     siRateMultiplier            = 'rmul',
  127.     siQuality                    = 'qual',
  128. /*format types*/
  129.     kOffsetBinary                = 'raw ',
  130.     kTwosComplement                = 'twos',
  131.     kMACE3Compression            = 'MAC3',
  132.     kMACE6Compression            = 'MAC6'
  133. };
  134.  
  135. /*quality flags*/
  136. enum {
  137. /*use interpolation in rate conversion*/
  138.     kBestQuality                = (1 << 0)
  139. };
  140.  
  141. enum {
  142. /*useful bit masks*/
  143.     kInputMask                    = 0x000000FF,                    /*masks off input bits*/
  144.     kOutputMask                    = 0x0000FF00,                    /*masks off output bits*/
  145.     kOutputShift                = 8,                            /*amount output bits are shifted*/
  146.     kActionMask                    = 0x00FF0000,                    /*masks off action bits*/
  147.     kSoundComponentBits            = 0x00FFFFFF
  148. };
  149.  
  150. enum {
  151. /*SoundComponentPlaySourceBuffer action flags*/
  152.     kSourcePaused                = (1 << 0),
  153.     kPassThrough                = (1L << 16),
  154.     kNoSoundComponentChain        = (1L << 17),
  155. /*flags for OpenMixerSoundComponent*/
  156.     kNoMixing                    = (1 << 0),                        /*don't mix source*/
  157.     kNoSampleRateConversion        = (1 << 1),                        /*don't convert sample rate (i.e. 11 kHz -> 22 kHz)*/
  158.     kNoSampleSizeConversion        = (1 << 2),                        /*don't convert sample size (i.e. 16 -> 8)*/
  159.     kNoSampleFormatConversion    = (1 << 3),                        /*don't convert sample format (i.e. 'twos' -> 'raw ')*/
  160.     kNoChannelConversion        = (1 << 4),                        /*don't convert stereo/mono*/
  161.     kNoDecompression            = (1 << 5),                        /*don't decompress (i.e. 'MAC3' -> 'raw ')*/
  162.     kNoVolumeConversion            = (1 << 6),                        /*don't apply volume*/
  163.     kNoRealtimeProcessing        = (1 << 7)                        /*won't run at interrupt time*/
  164. };
  165.  
  166. /*Audio Component constants*/
  167. enum {
  168. /*Values for whichChannel parameter*/
  169.     audioAllChannels            = 0,                            /*All channels (usually interpreted as both left and right)*/
  170.     audioLeftChannel            = 1,                            /*Left channel*/
  171.     audioRightChannel            = 2,                            /*Right channel*/
  172. /*Values for mute parameter*/
  173.     audioUnmuted                = 0,                            /*Device is unmuted*/
  174.     audioMuted                    = 1,                            /*Device is muted*/
  175. /*Capabilities flags definitions*/
  176.     audioDoesMono                = (1L << 0),                    /*Device supports mono output*/
  177.     audioDoesStereo                = (1L << 1),                    /*Device supports stereo output*/
  178.     audioDoesIndependentChannels = (1L << 2)                    /*Device supports independent software control of each channel*/
  179. };
  180.  
  181. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  182. /* typedefs*/
  183. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  184.  
  185.  
  186. /*ShortFixed consists of an 8 bit, 2's complement integer part in the high byte,*/
  187. /*with an 8 bit fractional part in the low byte; its range is -128 to 127.99609375*/
  188. typedef short ShortFixed;
  189.  
  190. typedef struct SoundComponentData SoundComponentData;
  191.  
  192. typedef struct SoundComponentData *SoundComponentDataPtr;
  193.  
  194. struct SoundComponentData {
  195.     long                            flags;
  196.     OSType                            format;
  197.     short                            numChannels;
  198.     short                            sampleSize;
  199.     UnsignedFixed                    sampleRate;
  200.     long                            sampleCount;
  201.     Byte                            *buffer;
  202.     long                            reserved;
  203. };
  204. typedef struct SoundParamBlock SoundParamBlock;
  205.  
  206. typedef SoundParamBlock *SoundParamBlockPtr;
  207.  
  208. typedef pascal Boolean (*SoundParamProcPtr)(SoundParamBlockPtr *pb);
  209.  
  210. #if GENERATINGCFM
  211. typedef UniversalProcPtr SoundParamUPP;
  212. #else
  213. typedef SoundParamProcPtr SoundParamUPP;
  214. #endif
  215.  
  216. struct SoundParamBlock {
  217.     long                            recordSize;                    /*size of this record in bytes*/
  218.     SoundComponentData                desc;                        /*description of sound buffer*/
  219.     UnsignedFixed                    rateMultiplier;                /*rate multiplier to apply to sound*/
  220.     short                            leftVolume;                    /*volumes to apply to sound*/
  221.     short                            rightVolume;
  222.     long                            quality;                    /*quality to apply to sound*/
  223.     ComponentInstance                filter;                        /*filter to apply to sound*/
  224.     SoundParamUPP                    moreRtn;                    /*routine to call to get more data*/
  225.     SoundParamUPP                    completionRtn;                /*routine to call when buffer is complete*/
  226.     long                            refCon;                        /*user refcon*/
  227.     short                            result;                        /*result*/
  228. };
  229. typedef struct privateSoundSource *SoundSource;
  230.  
  231. struct AudioInfo {
  232.     long                            capabilitiesFlags;            /*Describes device capabilities*/
  233.     long                            reserved;                    /*Reserved by Apple*/
  234.     unsigned short                    numVolumeSteps;                /*Number of significant increments between min and max volume*/
  235. };
  236. typedef struct AudioInfo AudioInfo;
  237.  
  238. typedef AudioInfo *AudioInfoPtr;
  239.  
  240. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  241. /* functions for sound components*/
  242. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  243. /*Sound Component dispatch selectors*/
  244.  
  245. enum {
  246. /*these calls cannot be delegated*/
  247.     kSoundComponentInitOutputDeviceSelect = 1,
  248.     kSoundComponentSetSourceSelect = 2,
  249.     kSoundComponentGetSourceSelect = 3,
  250.     kSoundComponentGetSourceDataSelect = 4,
  251.     kSoundComponentSetOutputSelect = 5,
  252.     kDelegatedSoundComponentSelectors = 0x0100,                    /*first selector that can be delegated up the chain*/
  253. /*these calls can be delegated and have own range*/
  254.     kSoundComponentAddSourceSelect = kDelegatedSoundComponentSelectors + 1,
  255.     kSoundComponentRemoveSourceSelect = kDelegatedSoundComponentSelectors + 2,
  256.     kSoundComponentGetInfoSelect = kDelegatedSoundComponentSelectors + 3,
  257.     kSoundComponentSetInfoSelect = kDelegatedSoundComponentSelectors + 4,
  258.     kSoundComponentStartSourceSelect = kDelegatedSoundComponentSelectors + 5,
  259.     kSoundComponentStopSourceSelect = kDelegatedSoundComponentSelectors + 6,
  260.     kSoundComponentPauseSourceSelect = kDelegatedSoundComponentSelectors + 7,
  261.     kSoundComponentPlaySourceBufferSelect = kDelegatedSoundComponentSelectors + 8
  262. };
  263.  
  264. /*Audio Component selectors*/
  265. enum {
  266.     kAudioGetVolumeSelect        = 0,
  267.     kAudioSetVolumeSelect        = 1,
  268.     kAudioGetMuteSelect            = 2,
  269.     kAudioSetMuteSelect            = 3,
  270.     kAudioSetToDefaultsSelect    = 4,
  271.     kAudioGetInfoSelect            = 5,
  272.     kAudioGetBassSelect            = 6,
  273.     kAudioSetBassSelect            = 7,
  274.     kAudioGetTrebleSelect        = 8,
  275.     kAudioSetTrebleSelect        = 9,
  276.     kAudioGetOutputDeviceSelect    = 10,
  277.     kAudioMuteOnEventSelect        = 129
  278. };
  279.  
  280.  
  281.  
  282. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  283. /* Sound Manager 3.0 utilities*/
  284. extern pascal OSErr OpenMixerSoundComponent(SoundComponentDataPtr outputDescription, long outputFlags, ComponentInstance *mixerComponent)
  285.  FOURWORDINLINE(0x203C, 0x0614, 0x0018, 0xA800);
  286. extern pascal OSErr CloseMixerSoundComponent(ComponentInstance ci)
  287.  FOURWORDINLINE(0x203C, 0x0218, 0x0018, 0xA800);
  288.  
  289.  
  290. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  291. /* basic sound component functions*/
  292. extern pascal ComponentResult SoundComponentInitOutputDevice(ComponentInstance ti, long actions)
  293.  FIVEWORDINLINE(0x2F3C, 4, 1, 0x7000, 0xA82A);
  294. extern pascal ComponentResult SoundComponentSetSource(ComponentInstance ti, SoundSource sourceID, ComponentInstance source)
  295.  FIVEWORDINLINE(0x2F3C, 8, 2, 0x7000, 0xA82A);
  296. extern pascal ComponentResult SoundComponentGetSource(ComponentInstance ti, SoundSource sourceID, ComponentInstance *source)
  297.  FIVEWORDINLINE(0x2F3C, 8, 3, 0x7000, 0xA82A);
  298. extern pascal ComponentResult SoundComponentGetSourceData(ComponentInstance ti, SoundComponentDataPtr *sourceData)
  299.  FIVEWORDINLINE(0x2F3C, 4, 4, 0x7000, 0xA82A);
  300. extern pascal ComponentResult SoundComponentSetOutput(ComponentInstance ti, SoundComponentDataPtr requested, SoundComponentDataPtr *actual)
  301.  FIVEWORDINLINE(0x2F3C, 8, 5, 0x7000, 0xA82A);
  302.  
  303.  
  304. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  305. /* junction methods for the mixer, must be called at non-interrupt level*/
  306. extern pascal ComponentResult SoundComponentAddSource(ComponentInstance ti, SoundSource *sourceID)
  307.  FIVEWORDINLINE(0x2F3C, 4, 0x0101, 0x7000, 0xA82A);
  308. extern pascal ComponentResult SoundComponentRemoveSource(ComponentInstance ti, SoundSource sourceID)
  309.  FIVEWORDINLINE(0x2F3C, 4, 0x0102, 0x7000, 0xA82A);
  310.  
  311.  
  312. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  313. /* info methods*/
  314. extern pascal ComponentResult SoundComponentGetInfo(ComponentInstance ti, SoundSource sourceID, OSType selector, void *infoPtr)
  315.  FIVEWORDINLINE(0x2F3C, 12, 0x0103, 0x7000, 0xA82A);
  316. extern pascal ComponentResult SoundComponentSetInfo(ComponentInstance ti, SoundSource sourceID, OSType selector, void *infoPtr)
  317.  FIVEWORDINLINE(0x2F3C, 12, 0x0104, 0x7000, 0xA82A);
  318.  
  319.  
  320. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  321. /* control methods*/
  322. extern pascal ComponentResult SoundComponentStartSource(ComponentInstance ti, short count, SoundSource *sources)
  323.  FIVEWORDINLINE(0x2F3C, 6, 0x0105, 0x7000, 0xA82A);
  324. extern pascal ComponentResult SoundComponentStopSource(ComponentInstance ti, short count, SoundSource *sources)
  325.  FIVEWORDINLINE(0x2F3C, 6, 0x0106, 0x7000, 0xA82A);
  326. extern pascal ComponentResult SoundComponentPauseSource(ComponentInstance ti, short count, SoundSource *sources)
  327.  FIVEWORDINLINE(0x2F3C, 6, 0x0107, 0x7000, 0xA82A);
  328. extern pascal ComponentResult SoundComponentPlaySourceBuffer(ComponentInstance ti, SoundSource sourceID, SoundParamBlockPtr pb, long actions)
  329.  FIVEWORDINLINE(0x2F3C, 12, 0x0108, 0x7000, 0xA82A);
  330.  
  331.  
  332. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  333. /* interface for Audio Components*/
  334. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  335.  
  336.  
  337. /*Volume is described as a value between 0 and 1, with 0 indicating minimum
  338.   volume and 1 indicating maximum volume; if the device doesn't support
  339.   software control of volume, then a value of unimpErr is returned, indicating
  340.   that these functions are not supported by the device*/
  341.  
  342.  
  343. extern pascal ComponentResult AudioGetVolume(ComponentInstance ac, short whichChannel, ShortFixed *volume)
  344.  FIVEWORDINLINE(0x2F3C, 6, 0, 0x7000, 0xA82A);
  345. extern pascal ComponentResult AudioSetVolume(ComponentInstance ac, short whichChannel, ShortFixed volume)
  346.  FIVEWORDINLINE(0x2F3C, 4, 1, 0x7000, 0xA82A);
  347.  
  348.  
  349. /*If the device doesn't support software control of mute, then a value of unimpErr is*/
  350. /*returned, indicating that these functions are not supported by the device*/
  351. extern pascal ComponentResult AudioGetMute(ComponentInstance ac, short whichChannel, short *mute)
  352.  FIVEWORDINLINE(0x2F3C, 6, 2, 0x7000, 0xA82A);
  353. extern pascal ComponentResult AudioSetMute(ComponentInstance ac, short whichChannel, short mute)
  354.  FIVEWORDINLINE(0x2F3C, 4, 3, 0x7000, 0xA82A);
  355.  
  356.  
  357. /*AudioSetToDefaults causes the associated device to reset its volume and mute values*/
  358. /*(and perhaps other characteristics, e.g. attenuation) to "factory default" settings*/
  359. extern pascal ComponentResult AudioSetToDefaults(ComponentInstance ac)
  360.  FIVEWORDINLINE(0x2F3C, 0, 4, 0x7000, 0xA82A);
  361.  
  362.  
  363. /*This routine is required; it must be implemented by all audio components*/
  364. extern pascal ComponentResult AudioGetInfo(ComponentInstance ac, AudioInfoPtr info)
  365.  FIVEWORDINLINE(0x2F3C, 4, 5, 0x7000, 0xA82A);
  366. extern pascal ComponentResult AudioGetBass(ComponentInstance ac, short whichChannel, short *bass)
  367.  FIVEWORDINLINE(0x2F3C, 6, 6, 0x7000, 0xA82A);
  368. extern pascal ComponentResult AudioSetBass(ComponentInstance ac, short whichChannel, short bass)
  369.  FIVEWORDINLINE(0x2F3C, 4, 7, 0x7000, 0xA82A);
  370. extern pascal ComponentResult AudioGetTreble(ComponentInstance ac, short whichChannel, short *Treble)
  371.  FIVEWORDINLINE(0x2F3C, 6, 8, 0x7000, 0xA82A);
  372. extern pascal ComponentResult AudioSetTreble(ComponentInstance ac, short whichChannel, short Treble)
  373.  FIVEWORDINLINE(0x2F3C, 4, 9, 0x7000, 0xA82A);
  374. extern pascal ComponentResult AudioGetOutputDevice(ComponentInstance ac, Component *outputDevice)
  375.  FIVEWORDINLINE(0x2F3C, 4, 10, 0x7000, 0xA82A);
  376.  
  377.  
  378. /*This is routine is private to the AudioVision component.  It enables the watching of the mute key.*/
  379. extern pascal ComponentResult AudioMuteOnEvent(ComponentInstance ac, short muteOnEvent)
  380.  FIVEWORDINLINE(0x2F3C, 2, 129, 0x7000, 0xA82A);
  381.  
  382.  
  383. enum {
  384.     uppSoundParamProcInfo = kPascalStackBased
  385.          | RESULT_SIZE(SIZE_CODE(sizeof(Boolean)))
  386.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SoundParamBlockPtr*)))
  387. };
  388.  
  389. #if GENERATINGCFM
  390. #define NewSoundParamProc(userRoutine)        \
  391.         (SoundParamUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSoundParamProcInfo, GetCurrentArchitecture())
  392. #else
  393. #define NewSoundParamProc(userRoutine)        \
  394.         ((SoundParamUPP) (userRoutine))
  395. #endif
  396.  
  397. #if GENERATINGCFM
  398. #define CallSoundParamProc(userRoutine, pb)        \
  399.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSoundParamProcInfo, (pb))
  400. #else
  401. #define CallSoundParamProc(userRoutine, pb)        \
  402.         (*(userRoutine))((pb))
  403. #endif
  404.  
  405.  
  406. #ifdef __CFM68K__
  407. #pragma lib_export off
  408. #endif
  409.  
  410. #if GENERATINGPOWERPC
  411. #pragma options align=reset
  412. #endif
  413.  
  414. #ifdef __cplusplus
  415. }
  416. #endif
  417.  
  418. #endif /* rez */
  419. #endif /* __SOUNDCOMPONENTS__ */
  420.